package sixth;

public class note {
    public static void main(String[] args) {
    }
}
/**
 * ①Java中不允许多重继承 就是一个子类只能有一个父类
 * 但是允许有多层父类 ：子类-》父类1-》父类2-》父类3-》父类4
 * ②继承的子类有时候也叫派生类
 * ③使用继承的时候注意：
 * 子类不可以直接访问父类的私有属性 但是子类可以调用父类的非私有方法
 * 间接访问：
 * System.out.println("父类中的name属性："+getName());
 * 子类对象的实例化过程：
 * 子类对象在实例化之前必须要先调用父类的构造方法之后在调用子类自己的构造方法
 *           
 * 方法的覆写：
 * 方法覆写的时候必须要考虑到权限的问题
 * 被覆写的子类的方法不能拥有比父类方法更严格的访问权限
 * 当前只知道：private<default<public
 *           
 * super.方法；就可以调用父类的方法
 *           
 *           
 * final关键字
 * 可以用来声明类 属性 方法
 * 但要注意：
 * ①使用final声明的类中不能有子类
 * ②使用final声明的方法不能被子类所覆写
 * ③使用final声明的变量即成为常量 常量不可以修改
 *           
 * 在使用fianl声明变量的时候 要求全部的字母大写 比如 ：INFO
 * 如果一个程序中的变量用public static final声明 则此变量称为全局常量
 * public static final String INFO="www.baidu.com";
 *           
 *           
 * 抽象类
 * 抽象类作用像”模板“，目的是要设计者依据它的格式来修改并创建新的类，但是并不能直接由抽象类创建类
 * 只能通过抽象类派生出新的类 在由它来创建对象
 * 但是在抽象类的使用中同样存在单继承的局限 即一个子类只能继承一个抽象类
 *           
 * 抽象类的定义和使用规则：
 * ①包含一个抽象方法的类必须是抽象类
 * ②抽象类和抽象方法都要用abstract声明
 * ③抽象方法只需声明而不需要实现
 * ④抽象类必须被子类继承，子类（如果不是抽象类）必须覆写抽象类中的全部抽象方法
 *           
 * 在抽象方法中是没有方法体的
 *           
 * 抽象类与普通类最大的区别就是强制 强制要求子类覆写父类方法
 * 一个抽象类不能用final声明
 *           
 * 一个抽象类里面可以定义构造方法：
 * 因为抽象类中使用的是类的继承关系，而且抽象类中也存在各个属性，所以子类在实例化之前肯定是要先对父类进行实例化的
 *           
 *           
 *           
 * 接口
 * 接口可以理解为一个类里面全部都是由公共的抽象方法和全局常量所组成的
 * 注意：在接口中抽象方法必须定义成public访问权限 这是不可改变的！
 * 在接口中如果不写public 则也是public访问权限
 * 不管写不写 接口中的方法永远都是public
 *           
 * 内部类的扩展
 * 在一个抽象类中可以定义多个抽象类或接口
 * 在一个接口中也可以定义多个抽象类或接口
 *           
 * 抽象类和接口之间的关系
 * 区别点：
 * 定义
 * 组成
 * 使用
 * 关系
 * 常见设计模式
 * 对象
 * 局限
 * 实际
 * 选择
 * 特殊
 *           
 * 在类的设计中 一定记住以下原则：
 * 一个类不要去继承已经实现好的类 要么继承抽象类 要么实现接口
 * 如果接口和抽象类都额可以使用的话 那么优先使用接口 避免单继承局限
 *           
 * 接口定义加强
 * 在Java中 接口是解决多继承的主要手段 并且接口是由抽象方法和全局变量所组成的
 * 而这样的设计在Java8之后发生改变  从JDK1.8开始可以在接口中定义普通方法（使用default方法声明）与静态方法（static声明）
 * 
 * 接口定义加强操作的意义可能体现在以下几个方面：
 * ①增强接口功能：通过在接口中使用default和static关键字定义方法，可以在不修改现有实现类的情况下，向接口添加新的方法实现。这样做可以避免因为接口的变更而导致所有实现类的修改，减少了维护成本。
 * ②提高代码复用性：在接口中实现默认方法可以将一些通用的功能抽象出来，供实现类直接使用，而不需要每个实现类都重复编写相同的代码。
 * ③保持接口的稳定性：随着项目的发展，可能需要在接口中添加新的功能。通过加强接口的定义，可以在不破坏现有实现的情况下对接口进行扩展，保持了接口的稳定性和向后兼容性。
 * ④灵活性和可扩展性：接口的加强使得接口的设计更加灵活，可以根据需要随时添加新的方法，而不用担心影响到现有的实现类。这种设计模式增强了程序的可扩展性。
 * ⑤简化API设计：在某些情况下，为了提供一个简单的API，可能需要隐藏一些复杂的实现细节。通过在接口中提供默认方法，可以将这些复杂性封装在接口内部，而不必暴露给实现类。
 * ⑥兼容旧版本代码：在Java 8之前，接口只能包含抽象方法。加强接口的定义允许开发者在不破坏旧版本代码的前提下，向接口中添加新的方法实现，有助于平滑地进行版本升级。
 * ⑦支持多重继承：在Java中，类不能多重继承，但可以实现多个接口。通过在接口中定义默认方法，可以实现类似多重继承的效果，即一个类可以通过实现多个接口来继承多个默认方法的行为。
 *
 * Object类
 * 对于一个设计良好的类来说 最好覆写Object类中的equals(),hashCode(),toString()3个方法
 * 对于一个类 无论有没有调用toString()都会使用toString()方法
 * Object类提供的equals方法默认是比较地址，并不能比较内容
 * 实际上String也是Object类的子类，所以在String中已经实现了此方法，如果现在一个类需要实现对象的比较操作，则直接在类中覆写此方法即可
 * Object类在实际中的作用：
 * 因为Objecct类可以接受任意类型的引用数据类型，所以在很多的类库设计上都采用Object作为方法的参数，这样操作起来会比较方便
 *
 *包装类
 * 介绍：在Java的设计中提倡一种思想，即一切皆对象，那么这样一来就出现了一个矛盾，从数据类型的划分中知道Java中的数据分为基本数据类型和引用数据类型，
 * 但是基本数据类型怎么能成为对象呢？此时，就需要将这八种基本类型变为一个类的形式，那么这也是包装类的作用。
 * int      Integer
 * char     Character
 * short    Short
 * long     Long
 * float    Float
 * double   Double
 * boolean  Boolean
 * byte     Byte
 * ①除了Character和Boolean以为的6种类都是Number类的子类，Number类本身提供了一系列返回以上6种基本数据类型的操作
 *    比如public byte byteValue()     public abstract double doubleValue() 。。。。
 * ②Character类属于Object类的直接子类
 * ③Boolean类属于Object类的直接子类
 * Number类是一个抽象类，主要是将数字包装类中的内容变成基本数据类型
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */




